;-----------------------------------------------------------------------------
;  spr_3a.src -- SPR ライブラリ 2A モジュール
;  Copyright(c) 1994 SEGA
;  Written by H.E on 1994-07-25 Ver.1.00
;  Updated by H.E on 1994-07-25 Ver.1.00
;
;  このライブラリはスプライト３Ｄ表示処理モジュールで、以下のルーチンを含む。
;
;  SPR_3GetShdColor     -  ＲＧＢカラーの輝度による変換
;
;----------------------------------------------------------------------------
;
          .EXPORT     _SPR_3GetShdColor
          .SECTION    SEGA_P,CODE,ALIGN=4
;*****************************************************************************
;*
;* NAME:  SPR_3GetShdColor  - Compute RGB Shading Color
;*
;*        rgbColor = getShdColor(Uint16 baseRgbColor, Uint16 bright)
;*
;* PARAMETERS :
;*
;*     (1) Uint16  baseRgbColor  - <i>  元ＲＧＢカラー
;*     (2) Uint16  bright        - <i>  輝度（０−３１）
;*
;* DESCRIPTION:
;*
;*     ＲＧＢカラーを輝度により計算し返す
;*
;*
;* POSTCONDITIONS:
;*
;*     (1) Uint16  rgbColor      - <o>  ＲＧＢカラー
;*
;* CAVEATS:
;*
;*****************************************************************************
;
_SPR_3GetShdColor:
 	  STS	      MACL,@-R15
;                                      ; R4  : baseRgbColor
;                                      ; R5  : bright
          EXTU.W      R4,R1            ; R1  : r
          MOV.L       R1,R2            ; R2  : g
          MOV.L       R1,R3            ; R3  : b
          MOV         #31,R0
          AND         R0,R1            ; r =  baseRgbColor & 0x001f
          MOV.W       GS_03E0,R4
          AND         R4,R2
          SHLR2       R2
          SHLR2       R2
          SHLR        R2               ; g = (baseRgbColor & 0x03e0) >> 5
          MOV.W       GS_7C00,R0
          AND         R0,R3
          SHLR8       R3
          SHLR2       R3               ; b = (baseRgbColor & 0x7c00) >> 10
;
          MOV.L       GS_8421,R0       ; rgbColor  = 0x8421
          MUL.L       R1,R5
          STS         MACL,R6
          SHLR2       R6
          SHLR2       R6
          SHLR        R6
          ADD         R6,R0            ; rgbColor += (r * bright) >> 5
          MUL.L       R2,R5
          STS         MACL,R6
          AND         R4,R6
          ADD         R6,R0            ; rgbColor += ((g * bright) & 0x03e0)
          MUL.L       R3,R5
          STS         MACL,R6
          AND         R4,R6
          SHLL2       R6
          SHLL2       R6
          SHLL        R6
          ADD         R6,R0         ; rgbColor += ((b * bright) & 0x03e0) << 5
          RTS
          LDS.L       @R15+,MACL
;
	  .ALIGN      4
GS_03E0:  .DATA.W     H'03E0
GS_7C00:  .DATA.W     H'7C00
GS_8421:  .DATA.L     H'00008421
          .END
